From: Colin Walters Date: Tue, 21 Jul 2009 14:50:18 +0000 (-0400) Subject: If org.gnome.Panel exists on the bus, replace it rather than using gdb X-Git-Tag: archive/raspbian/50.5-1+rpi1~1^2~1013^2^2~11198 X-Git-Url: https://dgit.raspbian.org/%22http://www.example.com/cgi/%22/%22http:/www.example.com/cgi/%22?a=commitdiff_plain;h=fdd9b85448dae6ac68da506fbce2dbe5b0c7eac5;p=gnome-shell.git If org.gnome.Panel exists on the bus, replace it rather than using gdb Avoid depending on gdb for replacing an existing panel, since it requires debuginfo and gdb installed. Instead we grab the org.gnome.Panel DBus name, using DBus name replacement semantics. --- diff --git a/src/gnome-shell.in b/src/gnome-shell.in index f1d5e0ba4..eccea6c2a 100755 --- a/src/gnome-shell.in +++ b/src/gnome-shell.in @@ -13,6 +13,7 @@ import tempfile import termios import time import errno +import dbus def find_cmd (cmd_list): """ @@ -230,7 +231,16 @@ if options.wide: metacity_pid = pidof("metacity") compiz_pid = pidof("compiz.real") or pidof("compiz") -gnome_panel_pid = pidof("gnome-panel") + +# In Gnome 2.26 the panel grabs a dbus name and allows replacement; use that. +bus = dbus.Interface(dbus.SessionBus().get_object('org.freedesktop.DBus', '/org/freedesktop/DBus'), + 'org.freedesktop.DBus') +names = bus.ListNames() +gnome_panel_dbus = 'org.gnome.Panel' in names +if gnome_panel_dbus: + gnome_panel_pid = None +else: + gnome_panel_pid = pidof("gnome-panel") # Run in Xephyr if gnome-panel is already running and the user didn't # specify --replace. Otherwise, run fullscreen @@ -299,7 +309,7 @@ finally: if options.verbose: print "Restarting Compiz" subprocess.Popen(["/usr/bin/compiz"]) - if gnome_panel_pid: + if gnome_panel_dbus or gnome_panel_pid: if options.verbose: print "Restarting gnome-panel" subprocess.Popen(["/usr/bin/gnome-panel"]) diff --git a/src/shell-global.c b/src/shell-global.c index 6a803b5d8..ea316364b 100644 --- a/src/shell-global.c +++ b/src/shell-global.c @@ -739,11 +739,23 @@ shell_global_grab_dbus_service (ShellGlobal *global) */ exit (0); } - + + /* Also grab org.gnome.Panel to replace any existing panel process */ + if (!dbus_g_proxy_call (bus, "RequestName", &error, + G_TYPE_STRING, "org.gnome.Panel", + G_TYPE_UINT, DBUS_NAME_FLAG_REPLACE_EXISTING | DBUS_NAME_FLAG_DO_NOT_QUEUE, + G_TYPE_INVALID, + G_TYPE_UINT, &request_name_result, + G_TYPE_INVALID)) + { + g_print ("failed to acquire org.gnome.Panel: %s\n", error->message); + exit (1); + } + g_object_unref (bus); } -void +void shell_global_start_task_panel (ShellGlobal *global) { const char* panel_args[] = {"gnomeshell-taskpanel", SHELL_DBUS_SERVICE, NULL};